package version1.part2.Client.netty.handler;

import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.util.AttributeKey;
import version1.part1.common.message.RpcResponse;

/**
 * @author Stone
 * @version 1.0.1
 * @date 2025/9/19
 */
public class NettyClientHandler extends SimpleChannelInboundHandler<RpcResponse> {
    //重写核心方法，用于读取服务端返回的数据
    @Override
    protected void channelRead0(ChannelHandlerContext ctx, RpcResponse rpcResponse) throws Exception {
        //接收到response，让sendRequest读取response
        //将服务端返回的响应绑定到当前Channerl的属性中
        AttributeKey<RpcResponse> key = AttributeKey.valueOf("RPCResponse");
        ctx.channel().attr(key).set(rpcResponse);
        ctx.channel().close();//关闭当前通道（短连接模式）
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        //异常处理
        cause.printStackTrace();
        ctx.close();
    }
}
